

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/favicon.png">
  <link rel="icon" href="/img/favicon.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="Fly542">
  <meta name="keywords" content="">
  
    <meta name="description" content="有时进程会被其他服务或监控脚本莫名其妙的kill，为了找到真正发出kill或pkill信号的进程，我们可以使用linux下的audit工具来捕获发出创建或kill进程的父进程信息。 审核系统(audit)包含两个主要部分：用户空间的应用程序、实用程序，以及 kernel-side 系统调用处理。Kernel 的组件从用户空间的应用程序接受系统调用，并且通过三个过滤器中的一个过滤器来进行筛选： us">
<meta property="og:type" content="article">
<meta property="og:title" content="定位进程被kill或创建的父进程">
<meta property="og:url" content="http://fly542.cn/2022/01/27/04DevOps/14%E5%AE%9A%E4%BD%8D%E8%BF%9B%E7%A8%8B%E8%A2%ABkill%E6%88%96%E5%88%9B%E5%BB%BA%E7%9A%84%E7%88%B6%E8%BF%9B%E7%A8%8B/index.html">
<meta property="og:site_name" content="Fly542 技术沉淀">
<meta property="og:description" content="有时进程会被其他服务或监控脚本莫名其妙的kill，为了找到真正发出kill或pkill信号的进程，我们可以使用linux下的audit工具来捕获发出创建或kill进程的父进程信息。 审核系统(audit)包含两个主要部分：用户空间的应用程序、实用程序，以及 kernel-side 系统调用处理。Kernel 的组件从用户空间的应用程序接受系统调用，并且通过三个过滤器中的一个过滤器来进行筛选： us">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="http://fly542.cn/2022/01/27/04DevOps/14%E5%AE%9A%E4%BD%8D%E8%BF%9B%E7%A8%8B%E8%A2%ABkill%E6%88%96%E5%88%9B%E5%BB%BA%E7%9A%84%E7%88%B6%E8%BF%9B%E7%A8%8B/architecture.png">
<meta property="article:published_time" content="2022-01-27T03:57:05.000Z">
<meta property="article:modified_time" content="2022-12-30T03:33:01.434Z">
<meta property="article:author" content="Fly542">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="http://fly542.cn/2022/01/27/04DevOps/14%E5%AE%9A%E4%BD%8D%E8%BF%9B%E7%A8%8B%E8%A2%ABkill%E6%88%96%E5%88%9B%E5%BB%BA%E7%9A%84%E7%88%B6%E8%BF%9B%E7%A8%8B/architecture.png">
  
  
  <title>定位进程被kill或创建的父进程 - Fly542 技术沉淀</title>

  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@4/github-markdown.min.css" />
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hint.css@2/hint.min.css" />

  
    
    
      
      <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@10/styles/github-gist.min.css" />
    
  

  
    <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.css" />
  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    var CONFIG = {"hostname":"fly542.cn","root":"/","version":"1.8.14","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"right","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"copy_btn":true,"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 6.0.0"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>Fly542 技术沉淀</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="banner" id="banner" parallax=true
         style="background: url('/img/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="page-header text-center fade-in-up">
            <span class="h2" id="subtitle" title="定位进程被kill或创建的父进程">
              
            </span>

            
              <div class="mt-3">
  
  
    <span class="post-meta">
      <i class="iconfont icon-date-fill" aria-hidden="true"></i>
      <time datetime="2022-01-27 11:57" pubdate>
        2022年1月27日 中午
      </time>
    </span>
  
</div>

<div class="mt-1">
  
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      14k 字
    </span>
  

  
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      121 分钟
    </span>
  

  
  
</div>

            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div class="py-5" id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">定位进程被kill或创建的父进程</h1>
            
            <div class="markdown-body">
              <p>有时进程会被其他服务或监控脚本莫名其妙的kill，为了找到真正发出kill或pkill信号的进程，我们可以使用linux下的<code>audit</code>工具来捕获发出创建或kill进程的父进程信息。</p>
<p>审核系统(audit)包含两个主要部分：用户空间的应用程序、实用程序，以及 kernel-side 系统调用处理。Kernel 的组件从用户空间的应用程序接受系统调用，并且通过三个过滤器中的一个过滤器来进行筛选： <em>user</em>、<em>task</em> 或者 <em>exit</em>。一旦系统调用通过其中的一个过滤器，就将通过 <em>exclude</em> 过滤器进行传送，这是基于审核规则的配置，并把它传送给审核的守护程序做进一步的处理。架构图如下:</p>
<img src="/2022/01/27/04DevOps/14%E5%AE%9A%E4%BD%8D%E8%BF%9B%E7%A8%8B%E8%A2%ABkill%E6%88%96%E5%88%9B%E5%BB%BA%E7%9A%84%E7%88%B6%E8%BF%9B%E7%A8%8B/architecture.png" srcset="/img/loading.gif" lazyload class="">

<p><em>注意：审核所收集的信息量可能影响系统性能， 一般信息收集完毕后需清理规则并停止审核服务</em></p>
<h1 id="audit-安装部署"><a href="#audit-安装部署" class="headerlink" title="audit 安装部署"></a>audit 安装部署</h1><figure class="highlight vala"><table><tr><td class="gutter"><div class="code-wrapper"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></div></td><td class="code"><pre><code class="hljs vala"><span class="hljs-meta"># 安装audit</span><br>yum install -y audit<br><span class="hljs-meta"># 启动audit</span><br>service auditd start<br><span class="hljs-meta"># 停止</span><br>service auditd stop<br></code></pre></td></tr></table></figure>

<h1 id="audit-常用命令"><a href="#audit-常用命令" class="headerlink" title="audit 常用命令"></a>audit 常用命令</h1><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs awk"><span class="hljs-comment"># 列出当前设置的规则</span><br>auditctl -l<br><span class="hljs-comment"># 清理已经设置的规则</span><br>auditctl -D<br><span class="hljs-comment"># 添加一条规则，捕获发出kill或pkill命令或创建进程的进程信息, </span><br>auditctl -a <span class="hljs-keyword">exit</span>,always -S kill,execve<br><br></code></pre></td></tr></table></figure>

<h1 id="audit-日志分析示例"><a href="#audit-日志分析示例" class="headerlink" title="audit 日志分析示例"></a>audit 日志分析示例</h1><figure class="highlight routeros"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><code class="hljs routeros">**************************<br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.720:23218): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=59 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2347970 <span class="hljs-attribute">a1</span>=2346ce0 <span class="hljs-attribute">a2</span>=23467b0 <span class="hljs-attribute">a3</span>=7ffdda2a3780 <span class="hljs-attribute">items</span>=3 <span class="hljs-attribute">ppid</span>=29639 <span class="hljs-attribute">pid</span>=5554 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;600_cdn_mmoonni&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/bash&quot;</span> key=(<span class="hljs-literal">null</span>)<br>****************************<br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.751:23269): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=59 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=883430 <span class="hljs-attribute">a1</span>=87be20 <span class="hljs-attribute">a2</span>=883650 <span class="hljs-attribute">a3</span>=7ffd21c2f330 <span class="hljs-attribute">items</span>=2 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=EXECVE <span class="hljs-attribute">msg</span>=audit(1643192492.751:23269): <span class="hljs-attribute">argc</span>=2 <span class="hljs-attribute">a0</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">a1</span>=<span class="hljs-string">&quot;monit&quot;</span><br>************************<br><span class="hljs-attribute">type</span>=PATH <span class="hljs-attribute">msg</span>=audit(1643192492.752:23274): <span class="hljs-attribute">item</span>=0 <span class="hljs-attribute">name</span>=<span class="hljs-string">&quot;/usr/bin/rpm&quot;</span> <span class="hljs-attribute">inode</span>=50391106 <span class="hljs-attribute">dev</span>=08:02 <span class="hljs-attribute">mode</span>=0100755 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">ogid</span>=0 <span class="hljs-attribute">rdev</span>=00:00 <span class="hljs-attribute">objtype</span>=NORMAL<br><span class="hljs-attribute">type</span>=PATH <span class="hljs-attribute">msg</span>=audit(1643192492.752:23274): <span class="hljs-attribute">item</span>=1 <span class="hljs-attribute">name</span>=<span class="hljs-string">&quot;/lib64/ld-linux-x86-64.so.2&quot;</span> <span class="hljs-attribute">inode</span>=20973072 <span class="hljs-attribute">dev</span>=08:02 <span class="hljs-attribute">mode</span>=0100755 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">ogid</span>=0 <span class="hljs-attribute">rdev</span>=00:00 <span class="hljs-attribute">objtype</span>=NORMAL<br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.764:23275): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=62 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2c27 <span class="hljs-attribute">a1</span>=f <span class="hljs-attribute">a2</span>=7f776e62f7b8 <span class="hljs-attribute">a3</span>=7fffd20c62c0 <span class="hljs-attribute">items</span>=0 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=OBJ_PID <span class="hljs-attribute">msg</span>=audit(1643192492.764:23275): <span class="hljs-attribute">opid</span>=11303 <span class="hljs-attribute">oauid</span>=-1 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">oses</span>=-1 <span class="hljs-attribute">ocomm</span>=<span class="hljs-string">&quot;monit&quot;</span><br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.764:23276): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=62 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2c7e <span class="hljs-attribute">a1</span>=f <span class="hljs-attribute">a2</span>=7f776e62f7b8 <span class="hljs-attribute">a3</span>=7fffd20c62c0 <span class="hljs-attribute">items</span>=0 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=OBJ_PID <span class="hljs-attribute">msg</span>=audit(1643192492.764:23276): <span class="hljs-attribute">opid</span>=11390 <span class="hljs-attribute">oauid</span>=0 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">oses</span>=52555 <span class="hljs-attribute">ocomm</span>=<span class="hljs-string">&quot;jumper-monitor&quot;</span><br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.764:23277): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=62 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2c7f <span class="hljs-attribute">a1</span>=f <span class="hljs-attribute">a2</span>=7f776e62f7b8 <span class="hljs-attribute">a3</span>=7fffd20c62c0 <span class="hljs-attribute">items</span>=0 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=OBJ_PID <span class="hljs-attribute">msg</span>=audit(1643192492.764:23277): <span class="hljs-attribute">opid</span>=11391 <span class="hljs-attribute">oauid</span>=0 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">oses</span>=52628 <span class="hljs-attribute">ocomm</span>=<span class="hljs-string">&quot;zmq-proxy-monit&quot;</span><br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.764:23278): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=62 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2c8b <span class="hljs-attribute">a1</span>=f <span class="hljs-attribute">a2</span>=7f776e62f7b8 <span class="hljs-attribute">a3</span>=7fffd20c62c0 <span class="hljs-attribute">items</span>=0 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=OBJ_PID <span class="hljs-attribute">msg</span>=audit(1643192492.764:23278): <span class="hljs-attribute">opid</span>=11403 <span class="hljs-attribute">oauid</span>=0 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">oses</span>=52628 <span class="hljs-attribute">ocomm</span>=<span class="hljs-string">&quot;zcho-monitor&quot;</span><br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.764:23279): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=62 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=2c8c <span class="hljs-attribute">a1</span>=f <span class="hljs-attribute">a2</span>=7f776e62f7b8 <span class="hljs-attribute">a3</span>=7fffd20c62c0 <span class="hljs-attribute">items</span>=0 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5606 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;pkill&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/pkill&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=OBJ_PID <span class="hljs-attribute">msg</span>=audit(1643192492.764:23279): <span class="hljs-attribute">opid</span>=11404 <span class="hljs-attribute">oauid</span>=0 <span class="hljs-attribute">ouid</span>=0 <span class="hljs-attribute">oses</span>=888 <span class="hljs-attribute">ocomm</span>=<span class="hljs-string">&quot;promised-monito&quot;</span><br><span class="hljs-attribute">type</span>=SYSCALL <span class="hljs-attribute">msg</span>=audit(1643192492.765:23280): <span class="hljs-attribute">arch</span>=c000003e <span class="hljs-attribute">syscall</span>=59 <span class="hljs-attribute">success</span>=<span class="hljs-literal">yes</span> <span class="hljs-attribute">exit</span>=0 <span class="hljs-attribute">a0</span>=8830d0 <span class="hljs-attribute">a1</span>=87be60 <span class="hljs-attribute">a2</span>=883650 <span class="hljs-attribute">a3</span>=7ffd21c2f350 <span class="hljs-attribute">items</span>=3 <span class="hljs-attribute">ppid</span>=5554 <span class="hljs-attribute">pid</span>=5609 <span class="hljs-attribute">auid</span>=4294967295 <span class="hljs-attribute">uid</span>=0 <span class="hljs-attribute">gid</span>=0 <span class="hljs-attribute">euid</span>=0 <span class="hljs-attribute">suid</span>=0 <span class="hljs-attribute">fsuid</span>=0 <span class="hljs-attribute">egid</span>=0 <span class="hljs-attribute">sgid</span>=0 <span class="hljs-attribute">fsgid</span>=0 tty=(none) <span class="hljs-attribute">ses</span>=4294967295 <span class="hljs-attribute">comm</span>=<span class="hljs-string">&quot;service&quot;</span> <span class="hljs-attribute">exe</span>=<span class="hljs-string">&quot;/usr/bin/bash&quot;</span> key=(<span class="hljs-literal">null</span>)<br><span class="hljs-attribute">type</span>=EXECVE <span class="hljs-attribute">msg</span>=audit(1643192492.765:23280): <span class="hljs-attribute">argc</span>=4 <span class="hljs-attribute">a0</span>=<span class="hljs-string">&quot;/bin/sh&quot;</span> <span class="hljs-attribute">a1</span>=<span class="hljs-string">&quot;/usr/sbin/service&quot;</span> <span class="hljs-attribute">a2</span>=<span class="hljs-string">&quot;monit&quot;</span> <span class="hljs-attribute">a3</span>=<span class="hljs-string">&quot;restart&quot;</span><br><span class="hljs-attribute">type</span>=CWD <span class="hljs-attribute">msg</span>=audit(1643192492.765:23280):  <span class="hljs-attribute">cwd</span>=<span class="hljs-string">&quot;/opt/soft/fast/agent/v0.0.25.e326b11&quot;</span><br></code></pre></td></tr></table></figure>
<p>如上例中的日志中发现promised-monito 被kill掉，从上述倒数第4行日志发现promised-monito 有收到消息, 那是谁发出的消息那，从倒数第5行日志看到<code>ppid=5554 pid=5606</code> 和<code>exe=&quot;/usr/bin/pkill&quot;</code> 可以看出是通过父进程(5554) 接收到pkill系统调用发生的。</p>
<p>那么5554又是哪个进程？通过执行<code>ps -ef |grep 5554</code> 发现找不到任何5554的信息，从而怀疑5554执行完相关pkill动作后就退出了，所以在日志中继续向上查找有谁创建了5554进程。通过日志发现了<code>items=3 ppid=29639 pid=5554 </code>和行尾的<code>comm=&quot;600_cdn_mmoonni&quot; exe=&quot;/usr/bin/bash&quot;</code> 说明5554是一个脚本进程，脚本的名字包含<code>600_cdn_mmoonni</code> 这个名字可能被截断了。再次通过执行<code>ps -ef |grep 29639</code> 我们发现了进程信息如下的进程信息</p>
<figure class="highlight apache"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs apache"><span class="hljs-attribute">root</span>      <span class="hljs-number">7915</span> <span class="hljs-number">12188</span>  <span class="hljs-number">0</span> <span class="hljs-number">14</span>:<span class="hljs-number">23</span> pts/<span class="hljs-number">0</span>    <span class="hljs-number">00</span>:<span class="hljs-number">00</span>:<span class="hljs-number">00</span> grep --color=auto fast<br><span class="hljs-attribute">root</span>     <span class="hljs-number">12957</span>     <span class="hljs-number">1</span>  <span class="hljs-number">0</span>  <span class="hljs-number">2021</span> ?        <span class="hljs-number">02</span>:<span class="hljs-number">26</span>:<span class="hljs-number">12</span> ./fast-updater -c cfg.json<br><span class="hljs-attribute">root</span>     <span class="hljs-number">29639</span>     <span class="hljs-number">1</span>  <span class="hljs-number">0</span>  <span class="hljs-number">2021</span> ?        <span class="hljs-number">08</span>:<span class="hljs-number">00</span>:<span class="hljs-number">13</span> ./fast-agent -c cfg.json<br><br></code></pre></td></tr></table></figure>
<p>通过<code>29639</code> 这个信息我们在fast-agent 服务的脚本中找到了<code>600_cdn_mmoonniitt_check.sh</code> 这个脚本，并在脚本中发现了<code>pkill monit </code>这样的杀死进程的命令。由于pkill是按照模糊匹配规则对所有运行进程中包含monit的进程发送pkill 命名，从而导致了我们的promised-monito 被意外杀死从而影响了线上服务的稳定性。</p>
<p>审核守护程序可以在 <code>/etc/audit/auditd.conf</code> 配置文件中进行配置。这个文件包括修改审核守护进程特性的配置参数。紧跟 # 字符（<code>#</code>）的任何空行或者文本都被忽略。所有配置参数的列表以及它们的解释都可以在 audit.conf(5) 手册页中找到。</p>
<h1 id="配置-auditd"><a href="#配置-auditd" class="headerlink" title="配置 auditd"></a>配置 <code>auditd</code></h1><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs awk">audit的默认配置文件路径为 <span class="hljs-regexp">/etc/</span>audit/auditd.conf<br>audit的默认日志路径为 <span class="hljs-regexp">/var/</span>log<span class="hljs-regexp">/audit/</span>audit.log<br></code></pre></td></tr></table></figure>

<p>默认 <code>auditd</code> 配置应该对大多数环境都适合。但是如果您的环境符合由 <em>可控制存取保护档案</em>（CAPP）所建立的标准，这将是公共标准认证的一部分，审核守护程序必须用以下设定配置：</p>
<ul>
<li>保存审核日志文件的目录（<code>/var/log/audit/</code>）经常应该在另一个分区。这将防止其他过程耗费此目录中的空间，并且为剩余的审核守护程序提供准确的检测。</li>
<li><em><code>max_log_file</code></em> 参数详细说明了每个审核日志文件最少的占用空间，参数必须设定为充分利用保存审核日志文件分区所在的可用空间。</li>
<li><em><code>max_log_file_action</code></em> 参数决定采取何种行动，一旦到达在 *<code>max_log_file</code>*中所设定的极限，则应该设定为 <code>keep_logs</code> 防止审核日志文件被重写。</li>
<li><em><code>space_left</code></em> 参数明确说明磁盘中可用空间的数量，这样的话在*<code>space_left_action</code>* 参数中所设定的行动会被触发。此参数必须被设定为一个数字它会给予管理者足够的时间来回应和刷新磁盘空间。 <em><code>space_left</code></em> 价值取决于审核日志文件生成的速度。</li>
<li>我们推荐您采用合适的通知方法把 <em><code>space_left_action</code></em> 参数设定为<code>email</code> 或者 <code>exec</code>。</li>
<li><em><code>admin_space_left</code></em> 参数明确说明自由空间的绝对最小数量，为了在 <em><code>admin_space_left_action</code></em> 参数中所设定的行动会被触发，必须设定一个会给予管理者的日志行动总够空间的值。</li>
<li><em><code>admin_space_left_action</code></em> 参数必须设定 <code>single</code> 使系统属于单一用户模式，并且允许管理者开放一些磁盘空间。</li>
<li><em><code>disk_full_action</code></em> 参数明确说明当保存审核日志文件的分区没有可用空间时，应该触发行动，并且必须设定为 <code>halt</code> 或者 <code>single</code>。这保障了当审核不再记录事件时，系统也能在单一用户模式下关闭或者运行。</li>
<li>*<code>disk_error_action</code>*，明确说明如果保存在审核日志文件的分区检测到错误时，应该采取行动，必须设定 <code>syslog</code>、<code>single</code> 或者 <code>halt</code>，这取决于当地的安全政策有关硬件故障的处理。</li>
<li><em><code>flush</code></em> 配置参数必须设定为 <code>sync</code> 或者 <code>data</code>。这些参数保证所有的审核事件数据能与磁盘中的日志文件同步。</li>
</ul>
<h1 id="定义审核规则"><a href="#定义审核规则" class="headerlink" title="定义审核规则"></a>定义审核规则</h1><p>审核系统根据一组规则运行，这组规则定义了日志文件中所获取的内容。有三种类型的审核规则可以详细说明：</p>
<ul>
<li>控制规则 — 允许审核系统的行为和它的一些被修改的配置。</li>
<li>文件系统规则 — 也被称为文件监视，允许审核进入特定文件或者目录。</li>
<li>系统调用规则 — 允许记录任何指定程序所做的系统调用。</li>
</ul>
<p>审核规则可以在命令行上使用 <strong>auditctl</strong> 实用程序进行详细说明（请注意这些规则并不是在重新启动时一直有效），或者写在 <code>/etc/audit/audit.rules</code> 文件中。以下两个部分总结了定义审核规则的两个方法。</p>
<p><strong>使用 <code>auditctl</code>  实用程序来定义审核规则</strong></p>
<p><strong>注意</strong></p>
<p>所有与审核服务交互的命令以及审核日志文件都需要 <code>root</code> 特权。作为 <code>root </code>用户确保您执行这些命令。</p>
<p><code>auditctl</code> 命令允许您控制审核系统的基本功能并且限定规则来决定哪些审核项目要记录。</p>
<h2 id="定义控制规则"><a href="#定义控制规则" class="headerlink" title="定义控制规则"></a>定义控制规则</h2><p>以下是一些控制规则允许您修改审核系统的行为：</p>
<ul>
<li><p><code>-b</code></p>
<p>在 Kernel 中设定最大数量的已存在的审核缓冲区，例如：<code>~]# auditctl -b 8192</code></p>
</li>
<li><p><code>-f</code></p>
<p>当追踪重要错误时设定所要完成的行动，例如：<code>~]# auditctl -f 2</code>以上配置触发 kernel 恐慌以防重要错误。</p>
</li>
<li><p><code>-e</code></p>
<p>启动或者禁用审核系统或者锁定它的配置，例如：<code>~]# auditctl -e 2</code>以上命令锁定审核配置。</p>
</li>
<li><p><code>-r</code></p>
<p>设定每秒生成信息的速率，例如：<code>~]# auditctl -r 0</code>以上配置在生成信息方面不设定限制速率。</p>
</li>
<li><p><code>-s</code></p>
<p>报告审核系统状态，例如：<code>~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0 </code></p>
</li>
<li><p><code>-l</code></p>
<p>列出所有当前装载的审核规则，例如：<code>~]# auditctl -l LIST_RULES: exit,always watch=/etc/localtime perm=wa key=time-change LIST_RULES: exit,always watch=/etc/group perm=wa key=identity LIST_RULES: exit,always watch=/etc/passwd perm=wa key=identity LIST_RULES: exit,always watch=/etc/gshadow perm=wa key=identity ⋮ </code></p>
</li>
<li><p><code>-D</code></p>
<p>删除所有当前装载的审核规则，例如：<code>~]# auditctl -D No rules </code></p>
</li>
</ul>
<h2 id="定义文件系统规则"><a href="#定义文件系统规则" class="headerlink" title="定义文件系统规则"></a>定义文件系统规则</h2><p>定义文件系统规则，使用以下语法：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">auditctl -w path_to_file -p permissions -k key_name<br></code></pre></td></tr></table></figure>

<p>其中：</p>
<ul>
<li><em>path_to_file</em> 是审核过的文件或者目录：</li>
<li><em>permissions</em> 是被记录的权限：<ul>
<li><code>r</code> — 读取文件或者目录。</li>
<li><code>w</code> — 写入文件或者目录。</li>
<li><code>x</code> — 运行文件或者目录。</li>
<li><code>a</code> — 改变在文件或者目录中的属性。</li>
</ul>
</li>
<li><em>key_name</em> 是可选字符串，可帮助您判定哪个规则或者哪组规则生成特定的日志项。</li>
</ul>
<p><strong>例 5.1. 文件系统规则</strong></p>
<p>为了定义所有的输写访问权限以及在 <code>/etc/passwd</code> 文件中每个属性更改的规则，执行以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -w /etc/passwd -p wa -k passwd_changes<br></code></pre></td></tr></table></figure>

<p>请注意以下字符串 <code>-k</code> 选项是任意的。</p>
<p>为了定义记录所有输写访问权限，以及在 <code>/etc/selinux/</code> 目录中所有文件属性更改的规则，执行以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes<br></code></pre></td></tr></table></figure>

<p>为了定义可以记录执行 <code>/sbin/insmod</code> 命令的规则，在 Linux Kernel 中插入模块，执行以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -w /sbin/insmod -p x -k module_insertion<br></code></pre></td></tr></table></figure>

<h2 id="定义系统调用规则"><a href="#定义系统调用规则" class="headerlink" title="定义系统调用规则"></a>定义系统调用规则</h2><p>为了定义系统调用规则，使用以下语法：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">auditctl -a action,filter -S system_call -F 输入栏=value -k key_name<br></code></pre></td></tr></table></figure>

<p>其中：</p>
<ul>
<li><em>action</em> 以及 <em>filter</em> 详细说明某个事件何时被记录。 <em>action</em> 可能是 <code>always</code>（经常是）或者<code>never</code>（从不是）其中之一。 <em>filter</em> 详细说明哪个 Kernel 规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过滤器： <code>task</code>、<code>exit</code>、<code>user</code> 以及 <code>exclude</code>。如果想要更多有关这些过滤器的信息，请参考〈<a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/chap-system_auditing#sec-audit_system_architecture">第 5.1 节 “审核系统架构”</a>〉的开始部分。</li>
<li><em>system_call</em> 通过它的名字详细说明系统调用。所有的系统调用都可以在<code>/usr/include/asm/unistd_64.h</code> 文件中找到。许多系统调用都能形成一个规则，每个都在 <code>-S</code> 选项之后详细说明。</li>
<li><em>field</em>=<em>value</em> 详细说明其他选项，进一步修改规则来与以特定架构、组 ID、进程 ID和其他内容为基础的事件相匹配。为了列出完整可用的输入栏类型和它们的数值，请参考 auditctl(8) 手册页。</li>
<li><em>key_name</em> 是可选字符串，可帮助您判定哪个规则或者哪组规则生成特定的日志项。</li>
</ul>
<p><strong>例 系统调用规则</strong></p>
<p>为了定义创造日志项 的规则，每次通过程序使用系统调用 <code>adjtimex</code> 或者 <code>settimeofday</code>。当系统使用 64 位架构，请执行以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change<br></code></pre></td></tr></table></figure>

<p>为了定义创造日志项的规则，每次由 ID 是 500 或更大的系统用户删除或者重命名文件时，使用（<code>-F auid!=4294967295</code> 选项排除没有设定登录 UID的用户），执行以下命令：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid&gt;=500 -F auid!=4294967295 -k delete<br></code></pre></td></tr></table></figure>

<p>使用系统调用语法来定义文件系统也是有可能的。对于 <code>-w /etc/shadow -p wa</code> 文件系统规则来说，以下命令为模拟的系统调用创造了规则：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa<br></code></pre></td></tr></table></figure>

<h2 id="在-etc-audit-audit-rules-文件中定义持久的审核规则和控制"><a href="#在-etc-audit-audit-rules-文件中定义持久的审核规则和控制" class="headerlink" title="在 /etc/audit/audit.rules 文件中定义持久的审核规则和控制"></a>在 <code>/etc/audit/audit.rules</code> 文件中定义持久的审核规则和控制</h2><p>为了定义在重新启动时可以一直有效的审核规则，您必须把它们包含在 <code>/etc/audit/audit.rules</code> 文件中。这个文件使用相同的 <code>auditctl</code> 命令行语法来详细说明规则。任何在 # 之后的空行或者文本（<code>#</code>）可以忽略。</p>
<p><code>auditctl</code> 指令可以被用来读取来自指定文件的规则，使用 <code>-R</code> 选项，例如：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# auditctl -R /usr/share/doc/audit-version/stig.rules<br></code></pre></td></tr></table></figure>

<h3 id="定义控制规则-1"><a href="#定义控制规则-1" class="headerlink" title="定义控制规则"></a>定义控制规则</h3><p>文件可以只包括以下的控制规则，修改审核系统的行为： <code>-b</code>、<code>-D</code>、<code>-e</code>、<code>-f</code>、或者 <code>-r</code>。如果想获取更多信息，请参考 <a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-Defining_Audit_Rules_and_Controls#bh-defining_controls_with_auditctl">“定义控制规则”一节</a>。</p>
<p><strong>例 5.3. 在 <code>audit.rules</code>中控制规则。</strong></p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs none"># Delete all previous rules<br>-D<br><br># Set buffer size<br>-b 8192<br><br># Make the configuration immutable -- reboot is required to change audit rules<br>-e 2<br><br># Panic when a failure occurs<br>-f 2<br><br># Generate at most 100 audit messages per second<br>-r 100<br></code></pre></td></tr></table></figure>

<h3 id="定义文件系统和系统调用规则"><a href="#定义文件系统和系统调用规则" class="headerlink" title="定义文件系统和系统调用规则"></a>定义文件系统和系统调用规则</h3><p>使用 <code>auditctl</code> 语法定义文件系统和系统调用原则。在〈<a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-Defining_Audit_Rules_and_Controls#sec-Defining_Audit_Rules_with_the_auditctl_utility">第 5.5.1 节 “使用 <strong>auditctl</strong> 实用程序来定义审核规则”</a>〉中的例子可以用以下规则文件来表示：</p>
<p><strong>例 5.4. 在 <code>audit.rules</code> 中的文件系统和系统调用规则</strong></p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs none">-w /etc/passwd -p wa -k passwd_changes<br>-w /etc/selinux/ -p wa -k selinux_changes<br>-w /sbin/insmod -p x -k module_insertion<br><br>-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change<br>-a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid&gt;=500 -F auid!=4294967295 -k delete<br></code></pre></td></tr></table></figure>

<h3 id="预配置规则文件"><a href="#预配置规则文件" class="headerlink" title="预配置规则文件"></a>预配置规则文件</h3><p>在 <code>/usr/share/doc/audit-*version*/</code> 目录中, 根据不同的认证标准 audit 软件包提供一组预配置规则文件：</p>
<ul>
<li><code>nispom.rules</code> — 审核规则配置符合《国家行业安全程序操作运行指南》的第八章中详细说明的要求。</li>
<li><code>capp.rules</code> — 审核规则配置满足由 <a target="_blank" rel="noopener" href="http://www.niap-ccevs.org/pp/pp_os_ca_v1.d.pdf">CAPP</a> 设定的要求，是公共标准认定的一部分。</li>
<li><code>lspp.rules</code> —审核规则配置满足由 <a target="_blank" rel="noopener" href="http://www.commoncriteriaportal.org/files/ppfiles/lspp.pdf">LSPP</a> 设定的要求是公共标准认定的一部分。</li>
<li><code>stig.rules</code> — 审核规则配置满足由 STIG 所设定的要求。</li>
</ul>
<p>为了使用这些配置文件，需要创造您原始文件的备份 <code>/etc/audit/audit.rules</code> 并且复制您所选择的有关 <code>/etc/audit/audit.rules</code> 文件的配置文件:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# cp /etc/audit/audit.rules /etc/audit/audit.rules_backup<br>~]# cp /usr/share/doc/audit-version/stig.rules /etc/audit/audit.rules<br></code></pre></td></tr></table></figure>



<h1 id="理解审核日志文件"><a href="#理解审核日志文件" class="headerlink" title="理解审核日志文件"></a>理解审核日志文件</h1><p>默认情况下，在 <code>/var/log/audit/audit.log</code> 文件中的审核系统储存日志项；如果启用日志旋转，就可以旋转储存在同一目录中的 <code>audit.log</code> 文件。</p>
<p>以下的审核规则记录了每次读取或者修改 <code>/etc/ssh/sshd_config</code> 文件的尝试：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">-w /etc/ssh/sshd_config -p warx -k sshd_config<br></code></pre></td></tr></table></figure>

<p>如果 <code>auditd</code> 守护程序在运行，就需在审核日志文件中运行以下命令创造新事件：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs none">~]# cat /etc/ssh/sshd_config<br></code></pre></td></tr></table></figure>

<p>在 <code>audit.log</code> 文件中的事件如下所示：</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs none">type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts0 ses=1 comm=&quot;cat&quot; exe=&quot;/bin/cat&quot; subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=&quot;sshd_config&quot;<br>type=CWD msg=audit(1364481363.243:24287):  cwd=&quot;/home/shadowman&quot;<br>type=PATH msg=audit(1364481363.243:24287): item=0 name=&quot;/etc/ssh/sshd_config&quot; inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0<br></code></pre></td></tr></table></figure>

<p>以上事件由三个记录组成（每个以 <code>type=</code> 密码作为开始），共享相同的时间戳和编号。每个记录包含好几对 <code>*name*=*value*</code> ，由空格或者逗号分开。以下是关于以上事件的详细分析：</p>
<h3 id="第一个记录"><a href="#第一个记录" class="headerlink" title="第一个记录"></a>第一个记录</h3><ul>
<li><p><code>type=SYSCALL</code></p>
<p><code>type</code> 输入栏包含这类记录。在这个例子中， <code>SYSCALL</code> 数值详细说明连接到 Kernel 的系统调用触发了这个记录。为了列出所有可能的类型值和它们的解释，请参考〈<a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-Audit_Record_Types">第 B.2 节 “审核记录类型”</a>〉。</p>
</li>
<li><p><code>msg=audit(1364481363.243:24287):</code></p>
<p><code>msg</code> 输入栏记录：<code>audit(*time_stamp*:*ID*)</code> 表格中记录的时间戳和特殊 ID。如果多种记录生成为相同审核事件的一部分，那么它们可以共享相同的时间戳和 ID。Kernel 或者用户空间应用提供不同的事件特定 <code>*name*=*value*</code> 组。</p>
</li>
<li><p><code>arch=c000003e</code></p>
<p><code>arch</code> 输入栏包括关于系统CPU架构的信息。值 <code>c000003e</code> 是使用 16 进制表示法编码。当使用 <code>ausearch</code> 命令搜寻审核记录时, 使用 <code>-i</code> 或者 <code>--interpret</code> 选项自动转化为 16 进制值可供人读取的对等语。 <code>c000003e</code> 值被解释为 <code>x86_64</code>。</p>
</li>
<li><p><code>syscall=2</code></p>
<p><code>syscall</code> 输入栏记录了传输给 Kernel 的输入栏类型。值 <code>2</code> 可以与在 <code>/usr/include/asm/unistd_64.h</code> 文件中可供人读取的对等语相匹配。 在这种情况下，<code>2</code> 是 <code>open</code> 系统调用。 请注意 <strong>ausyscall</strong> 实用程序允许您把系统调用数字转换成可供人读取的对等语。 使用 <code>ausyscall --dump</code> 命令来展示所有的系统调用和它们的号码。如想要获取更多信息，请参考 ausyscall(8) 手册页。</p>
</li>
<li><p><code>success=no</code></p>
<p><code>success</code> 输入栏记录了系统调用是否被成功地记录在特定事件中。在这种情况下，调用不会成功。</p>
</li>
<li><p><code>exit=-13</code></p>
<p><code>exit</code> 输入栏包含详细说明由系统调用所返回的退出代码的值。在不同的系统调用中，值各不相同。您可以用以下命令把值解释为可供人读取的对等语：<code>ausearch --interpret --exit -13</code>（假设您的审核日志中包含的事件没有退出代码 <code>-13</code>）。</p>
</li>
<li><p><code>a0=7fffd19c5592</code>, <code>a1=0</code>, <code>a2=7fffd19c5592</code>, <code>a3=a</code></p>
<p><code>a0</code> 到 <code>a3</code> 输入栏记录了前四个参数，在这个事件中使用 16 进制编码系统调用。这些参数取决于使用的系统调用；它们可以通过 <strong>ausearch</strong> 实用程序来解释。</p>
</li>
<li><p><code>items=1</code></p>
<p><code>items</code> 输入栏包含事件中路径记录的数量。</p>
</li>
<li><p><code>ppid=2686</code></p>
<p><code>items</code> 输入栏记录了父进程 ID（PPID）。在这个情况下，<code>2686</code> 是 <code>bash</code> 进程的 PPID。</p>
</li>
<li><p><code>pid=3538</code></p>
<p><code>pid</code> 输入栏记录了进程 ID（PID）。在这个情况下，<code>3538</code> 是 <code>cat</code> 进程的 PID。</p>
</li>
<li><p><code>auid=500</code></p>
<p><code>auid</code> 输入栏记录了审核用户 ID，这个是 loginuid。这个ID是用户在登录时使用的并且即使当用户身份改变时，也可以通过每个进程获取该ID。（例如，通过切换用户账户，使用 <code>su - john</code>命令）。</p>
</li>
<li><p><code>uid=500</code></p>
<p><code>uid</code> 输入栏记录了开始分析进程的用户 ID。使用以下指令：<code>ausearch -i --uid *UID*</code>，用户 ID 就可以被解释为用户名字。在这个情况下， <code>500</code> 是 <code>shadowman</code> 的用户 ID。</p>
</li>
<li><p><code>gid=500</code></p>
<p><code>gid</code> 输入栏记录了开始分析进程用户的 ID组。</p>
</li>
<li><p><code>euid=500</code></p>
<p><code>euid</code> 输入栏记录了开始分析进程用户的有效用户 ID。</p>
</li>
<li><p><code>suid=500</code></p>
<p><code>suid</code> 输入栏记录了开始分析进程的用户的设置用户 ID。</p>
</li>
<li><p><code>fsuid=500</code></p>
<p><code>fsuid</code> 输入栏记录了开始分析进程用户的文件系统用户 ID。</p>
</li>
<li><p><code>egid=500</code></p>
<p><code>egid</code> 输入栏记录了开始分析进程用户的有效群组 ID。</p>
</li>
<li><p><code>sgid=500</code></p>
<p><code>sgid</code> 输入栏记录了开始分析进程用户的设置群组 ID。</p>
</li>
<li><p><code>fsgid=500</code></p>
<p><code>fsgid</code> 输入栏记录了开始分析进程的用户的文件系统群组 ID。</p>
</li>
<li><p><code>tty=pts0</code></p>
<p><code>tty</code> 输入栏记录了调用分析进程的终端。</p>
</li>
<li><p><code>ses=1</code></p>
<p><code>ses</code> 输入栏记录了调用分析进程会话的会话 ID。</p>
</li>
<li><p><code>comm=&quot;cat&quot;</code></p>
<p><code>comm</code> 输入栏记录了命令行的名字，它被用于调用分析进程。在这种情况下 <code>cat</code> 命令被用来触发审核事件。</p>
</li>
<li><p><code>exe=&quot;/bin/cat&quot;</code></p>
<p><code>exe</code> 输入栏记录了被用来调用分析进程的可执行的路径。</p>
</li>
<li><p><code>subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023</code></p>
<p><code>subj</code> 输入栏记录了 SELinux 语境，运用此语境可以在执行时间中标注分析进程。</p>
</li>
<li><p><code>key=&quot;sshd_config&quot;</code></p>
<p><code>key</code> 输入栏记录了所有管理者定义的字符串，它与在审核日志中生成该事件的规则有关。</p>
</li>
</ul>
<h3 id="第二记录"><a href="#第二记录" class="headerlink" title="第二记录"></a>第二记录</h3><ul>
<li><p><code>type=CWD</code></p>
<p>在第二记录中，<code>type</code> 输入栏数值是 <code>CWD</code> — 当前工作目录。这种类型用于记录在被执行的第一记录中详细说明的触发系统调用的进程。这个记录的目的是为了记录当前进程的位置以防在相关的 PATH 记录中捕捉到相对路径。运用这个方法可以重塑绝对路径。</p>
</li>
<li><p><code>msg=audit(1364481363.243:24287)</code></p>
<p><code>msg</code> 输入栏持有与第一记录中的数值相同的时间戳和 ID 值。</p>
</li>
<li><p><code>cwd=&quot;/home/shadowman&quot;</code></p>
<p><code>cwd</code> 输入栏含有进入目录的路径，在目录中触发系统调用。</p>
</li>
</ul>
<h3 id="第三记录"><a href="#第三记录" class="headerlink" title="第三记录"></a>第三记录</h3><ul>
<li><p><code>type=PATH</code></p>
<p>在第三记录中， <code>type</code> 输入栏值是 <code>PATH</code>。每个审核事件包含一个 <code>PATH</code> 对于每条路径种类的记录作为一个参数，传输给系统调用。在审核事件中，只有一条路径（<code>/etc/ssh/sshd_config</code>）被用来作为参数。</p>
</li>
<li><p><code>msg=audit(1364481363.243:24287):</code></p>
<p><code>msg</code> 输入栏持有与第一和第二记录中的值相同的时间戳和 ID 值。</p>
</li>
<li><p><code>item=0</code></p>
<p><code>item</code> 输入栏表明在所有项目中，哪个项目在 <code>SYSCALL</code> 类型记录中，参考了当前记录。这个是数字是以零为基准；值 <code>0</code> 意味着它是第一项。</p>
</li>
<li><p><code>name=&quot;/etc/ssh/sshd_config&quot;</code></p>
<p><code>name</code> 输入栏记录了文件或者目录的所有路径，作为参数被传输给系统调用。在这种情况下，它是 <code>/etc/ssh/sshd_config</code> 文件。</p>
</li>
<li><p><code>inode=409248</code></p>
<p><code>inode</code> 输入栏包含索引结点数字，与记录在事件中的文件和目录有关。以下命令体现了与 <code>409248</code> 索引结点数字相关的文件和目录：<code>~]# find / -inum 409248 -print /etc/ssh/sshd_config </code></p>
</li>
<li><p><code>dev=fd:00</code></p>
<p><code>dev</code> 输入栏明确说明了设备的次要和主要 ID，它包含记录在事件中的文件和目录。在这种情况下，值代表 <code>/dev/fd/0</code> 设备。</p>
</li>
<li><p><code>mode=0100600</code></p>
<p><code>mode</code> 输入栏记录了文件和目录权限，用 16 进制表示法编码。在这种情况下，<code>0100600</code> 可以被解释为 <code>-rw-------</code>，意味着对于 <code>/etc/ssh/sshd_config</code> 文件，只有 root 用户拥有读取并且输入权限。</p>
</li>
<li><p><code>ouid=0</code></p>
<p><code>ouid</code> 输入栏记录了对象所有者的用户 ID。</p>
</li>
<li><p><code>ogid=0</code></p>
<p><code>ogid</code> 输入栏记录对象拥有者的群组 ID。</p>
</li>
<li><p><code>rdev=00:00</code></p>
<p><code>rdev</code> 输入栏包含记录的设备识别器只用于特殊文件。在这种情况下，正常文件是不用来作为记录文件的。</p>
</li>
<li><p><code>obj=system_u:object_r:etc_t:s0</code></p>
<p><code>obj</code> 输入栏记录了 SELinux 语境，运用此语境可以在执行时间中标注分析进程。</p>
</li>
</ul>
<p>以上分析过的审核事件是事件所包含的所有可能位置栏的一小部分。为了列出所有事件的位置栏及解释，请参考〈<a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/app-Audit_Reference#sec-Audit_Events_Fields">第 B.1 节 “审核事件字段”</a>〉。为了列出所有事件类型以及解释，请参考〈<a target="_blank" rel="noopener" href="https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/security_guide/sec-Audit_Record_Types">第 B.2 节 “审核记录类型”</a>〉。</p>
<h1 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h1><figure class="highlight awk"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs awk">https:<span class="hljs-regexp">//</span>blog.csdn.net<span class="hljs-regexp">/qwertyupoiuytr/</span>article<span class="hljs-regexp">/details/</span><span class="hljs-number">58278349</span><br>https:<span class="hljs-regexp">//</span>access.redhat.com<span class="hljs-regexp">/documentation/</span>zh-cn<span class="hljs-regexp">/red_hat_enterprise_linux/</span><span class="hljs-number">7</span><span class="hljs-regexp">/html/</span>security_guide/sec-understanding_audit_log_files<br>https:<span class="hljs-regexp">//</span>access.redhat.com<span class="hljs-regexp">/documentation/</span>zh-cn<span class="hljs-regexp">/red_hat_enterprise_linux/</span><span class="hljs-number">7</span><span class="hljs-regexp">/html/</span>security_guide/sec-defining_audit_rules_and_controls<br>https:<span class="hljs-regexp">//</span>www.jianshu.com<span class="hljs-regexp">/p/</span><span class="hljs-number">4</span>a7cc1944ea7<br>https:<span class="hljs-regexp">//</span>www.daimajiaoliu.com<span class="hljs-regexp">/daima/</span><span class="hljs-number">4795</span>a4ea61003fc<br>https:<span class="hljs-regexp">//</span>paper.seebug.org<span class="hljs-regexp">/1594/</span><span class="hljs-comment">#31</span><br>http:<span class="hljs-regexp">//</span>blog.chinaunix.net/uid-<span class="hljs-number">20662820</span>-id-<span class="hljs-number">5326690</span>.html<br></code></pre></td></tr></table></figure>
            </div>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                  <div class="post-meta mr-3">
                    <i class="iconfont icon-category"></i>
                    
                      <a class="hover-with-bg" href="/categories/devops/">devops</a>
                    
                  </div>
                
                
              </div>
              
                <p class="note note-warning">
                  
                    本博客所有文章除特别声明外，均采用 <a target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" rel="nofollow noopener noopener">CC BY-SA 4.0 协议</a> ，转载请注明出处！
                  
                </p>
              
              
                <div class="post-prevnext">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2022/02/11/04DevOps/15rpm%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E5%8F%8A%E9%97%AE%E9%A2%98%E5%A4%84%E7%90%86/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">rpm 常用命令及问题处理</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2022/01/07/03%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91/00%E4%B8%AA%E4%BA%BA%E5%BC%80%E5%8F%91%E5%9F%BA%E6%9C%AC%E5%8E%9F%E5%88%99/">
                        <span class="hidden-mobile">个人开发基本原则</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
    

    
  </main>

  <footer class="text-center mt-5 py-3">
  <div class="footer-content">
     <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> 
  </div>
  

  

  
</footer>


  <!-- SCRIPTS -->
  
  <script  src="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js" ></script>
<script  src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>

<!-- Plugins -->


  <script  src="/js/local-search.js" ></script>



  
    <script  src="/js/img-lazyload.js" ></script>
  



  



  
    <script  src="https://cdn.jsdelivr.net/npm/tocbot@4/dist/tocbot.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/anchor-js@4/anchor.min.js" ></script>
  
  
    <script defer src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js" ></script>
  






  <script  src="https://cdn.jsdelivr.net/npm/typed.js@2/lib/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var title = document.getElementById('subtitle').title;
      
        typing(title);
      
    })(window, document);
  </script>















<!-- 主题的启动项 保持在最底部 -->
<script  src="/js/boot.js" ></script>


</body>
</html>
